import Vue from 'vue';
import axios from 'axios';
import { Loading } from 'element-ui';
import router from '../router/index.js';

// 一次性导入该模块中所有的内容（包括按需导出和默认导出）
import * as user from '../api/user.js';

import * as right from '../api/right.js';
import * as role from '../api/role.js';
import * as goodsCate from '../api/goodsCate.js';
import * as goodsParams from '../api/goodsParams.js';
import * as goods from '../api/goods.js';

// 同一个模块导入多次，只会执行一次，有缓存
console.log('axios。。。。');

// 创建axios实例对象
// 原来是直接使用的axios({ ... })，这个会使用默认的axios对象
export const request = axios.create({
  // 在这里可以做全局配置
  baseURL: 'http://127.0.0.1:8888/api/private/v1/',
});

let loadingInstance = null;

// 请求拦截器，所有的请求在发送出去之前，都会先经过这里
request.interceptors.request.use((config) => {
  loadingInstance = Loading.service({ fullscreen: true });
  // 除了登录API以外，都要加上token请求头
  if (!config.url.startsWith('/login')) {
    config.headers.Authorization = localStorage.getItem('token');
  }
  return config;
});

request.interceptors.response.use((res) => {
  Vue.nextTick(() => {
    // 以服务的方式调用的 Loading 需要异步关闭
    loadingInstance.close();
  });
  if (res.data.meta.status === 400 && res.data.meta.msg === '无效token') {
    // TOKEN无效，需要删除token，并且强制跳转到登录页
    localStorage.removeItem('token');
    router.push('/login');
  }

  return res;
});

Vue.prototype.__apis = {
  // 登录
  login(data) {
    return request({
      method: 'POST',
      url: '/login',
      data,
    });
  },
  // 获取左侧菜单列表
  getLeftMenus() {
    return request({
      method: 'GET',
      url: '/menus',
    });
  },
  user,
  right,
  role,
  goodsCate,
  goodsParams,
  goods,
};
